# -*- coding: utf-8 -*-
from jaconn import bot
import re,sys,os,time
from random import randint
'''
http://paste.org.ru/?ffxty8
http://paste.org.ru/?9iuvw2
'''
#user = {'jid':'testnanodesu@jabber.ru/Nyaa~',
#        'passwd':'qaz',
#        'nick':'Nia',
#        'admin':'Apkawa@jabber.ru'}

#confs= [# 'жабы@conference.jabber.ru', 'torrents.ru_nixoids@conference.jabber.ru',  ]
#ignore = [user['nick'],'Yoko',]

class Nia(bot):
    def send(self, flag, text, extra=None):
        '''
        True - chat
        False - xml
        '''
        if flag:
            self.send_chat(self.type,self.to,text)
        else:
            self.send_xml(self.type,self.to,text,extra)

    def nia_help(self,args):
        '''Показывает список возможных функций'''
        if args:
            if self.commands.has_key(args):
                halp = self.commands[args].__doc__
            elif self.admin_commands.has_key(args):
                halp = self.admin_commands[args].__doc__
            self.send(True, halp)
        self.send(True, self.help)

    def nia_translate(self,args):
        tmp = re.findall('([\w]{2})[\s]([\w]{2})[\s](.*?)$',args)[0]
        if tmp:
            from_l, to_l, word = tmp[0],tmp[1],tmp[2]
        self.send(True, translated(word, to_l, from_l))
    def nia_say(self,args):
        '''Отправить сообщение от имени бота'''
        self.send(True, args)
    def nia_show(self,args):
        '''Показать картинку прямо в чате. Работает только в Gajim.'''
        if re.search('http://',args):
            text = self.XMLescape(args)
            extra = '<a href="%s"><img src="%s"/></a>'%(text,text)
            self.send(False, text, extra)
        else:
            self.send(True, 'Nyaaa? This does not link...')

    def nia_google(self, args):
        '''Find in google.com'''
        flag, text, extra = google(args,'web')
        self.send(flag, text, extra)
    def nia_enwiki(self, args):
        '''Find in en.wikipedia.org'''
        flag, text, extra = google('site:http://en.wikipedia.org %s'%args,'web')
    def nia_ruwiki(self, args):
        '''Find in http://ru.wikipedia.org'''
        flag, text, extra = google('site:http://ru.wikipedia.org %s'%args,'web')
        self.send(flag, text, extra)
    def nia_wa(self, args):
        '''Find in world-art.ru'''
        flag, text, extra = google('site:http://www.world-art.ru %s'%args,'web')
        self.send(flag, text, extra)
    def nia_adb(self, args):
        '''Find in anidb.info'''
        flag, text, extra = google('site:http://anidb.info %s'%args,'web')
        self.send(flag, text, extra)
    def nia_lurk(self, args):
        '''Find in lurkmore.ru'''
        flag, text, extra = google('site:http://lurkmore.ru/ %s'%args,'web')
        self.send(flag, text, extra)
    def nia_gpic(self, args):
        '''Найти картинку в google.com и отобразить прями в чате. Работает только в Gajim.'''
        flag, text, extra = google(args,'images')
        self.send(flag, text, extra)

    def _nia_version(self,args):
        nick = self.nick
        conf = '%s@%s'%(nick.getNode(),nick.getDomain())
        self.toversion = ''
        def get_iq(conn,mess):
            print mess
            query = mess.getTag('query')
            client = '%s %s'%(query.getTagData('name'),query.getTagData('version') )
            os = query.getTagData('os')
            self.toversion  = 'There it %s %s at %s'%(target, client, os)
            
        def version():
            query = self.query
            client = '%s %s'%(query.getTagData('name'),query.getTagData('version') )
            os = query.getTagData('os')
            version  = 'There it %s %s at %s'%(target, client, os)
            return version

        if not args:
            to = nick
            target = nick.getResource()
        else:
            to = '%s/%s'%(conf,args)
            target = args
        print to, target
        while True:
            self.send_iq('get',to)
            
        #self.send(True,version())
        #self.conn.RegisterHandler('iq',get_iq, typ='result', makefirst=1)

    def admin_join(self,nick,conf):
        '''Послать бота в комнату'''
        self.CONFS.append(conf)
        self.join_room((conf,))

    def admin_leave(self,nick,conf):
        '''Выйти из комнаты. Без аргументов - выйти из текущей комнаты.'''
        if not conf:
            conf = '%s@%s'%(nick.getNode(),nick.getDomain())
        to = '%s/%s'%(conf,self.NICK)
        self.send_system(to,'offline','unavailable')
        if self.CONFS.count(conf):
            self.CONFS.remove(conf)
    def admin_joined(self,nick,conf):
        '''Показать список комнат в котором находится бот'''
        return ' '.join(self.CONFS)

    def admin_ignore(self,nick,user):
        '''Игнорировать ботом юзера.'''
        self.ignore.append(user)
        return False

    def admin_noignore(self,nick,user):
        '''Снять игнор с юзера'''
        if self.ignore.count(user):
            self.ignore.remove(user)
        return False

    def admin_savecfg(self,nick,args):
        '''Сохранить текущюю конфигурацию'''
        self.config(True,self.CONFS,self.ignore)

    def admin_restart(self,nick,args):
        '''Перезапустить бота.'''
        print 'restarting'
        self.leave_room(self.CONFS)
        os.spawnl(os.P_NOWAIT, 'python', 'python' ,'nia.py')

    def admin_exit(self,nick,args):
        '''Отключить бота.'''
        sys.exit()



def google(word,type):
    import urllib,simplejson
    def web(results):
        if results:
            url = urllib.unquote(results[0]['url'])
            title1 = results[0]['titleNoFormatting']
            title2 = results[0]['title']
            content = re.sub('(<b>)|(</b>)','',results[0]['content'])
            text = '%s\n%s\n%s'%(title1,content,url)

            extra = '''<a href="%s">%s</a>
            <p>%s</p>
            '''%(url,title2,content)
            return True, text, extra
        else: return True, 'Nyaaa... Ничего не нашла.', ''
    def images(results):
        if results:
            imgurl = results[randint(0,len(results)-1)]['unescapedUrl']
            extra = '<a href="%s"><img src="%s"/></a>'%(imgurl,imgurl)
            return False,imgurl, extra
        else: return True, 'Nyaaa... Ничего не нашла.', ''
    #http://code.google.com/apis/ajaxsearch/documentation/reference.html#_intro_fonje
    word = urllib.quote(word.encode('utf-8'))
    #&rsz=large&
    src =  urllib.urlopen('http://ajax.googleapis.com/ajax/services/search/%s?v=1.0&q=%s&hl=ru'%(type,word)).read()
    convert = simplejson.loads(src)
    results = convert['responseData']['results']
    if type == 'web':
        return web(results)
    if type == 'images':
        return images(results)
    #print results


def translated(word,  to_l, from_l=None):
    import urllib,simplejson
    def transl(o_word, from_l, to_l):
        word = urllib.quote(o_word.encode('utf-8'))
        url = 'http://ajax.googleapis.com/ajax/services/language/translate?v=1.0&q=%s&langpair=%s%%7C%s'%(word, from_l, to_l)
        src =  urllib.urlopen(url).read()
        convert = simplejson.loads(src)
        status = convert['responseStatus']
        print status, type(status), convert
        if status == 200:
            results = convert['responseData']['translatedText']
            return results
        else: return o_word
    def detect_lang(word):
        word = urllib.quote(word.encode('utf-8'))
        url = 'http://ajax.googleapis.com/ajax/services/language/detect?v=1.0&q=%s'%word
        src =  urllib.urlopen(url).read()
        convert = simplejson.loads(src)
        results = convert['responseData']['language']
        print results
        return results

    transl =  transl(word, from_l, to_l)
    return transl
#http://code.google.com/apis/ajaxlanguage/documentation/reference.html#_fonje_detect


#user, confs, ignore = Nia.config(False,None,None)
nia = Nia()
nia.online()

